/*-------------------------------------------------------------------------
 *
 * quotes.c
 *	  字符串引用和转义函数
 *
 * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
 * Portions Copyright (c) 1994, Regents of the University of California
 *
 *
 * IDENTIFICATION
 *	  src/port/quotes.c
 *
 *-------------------------------------------------------------------------
 */

#include "c.h"

/*
 * 通过将任何单引号或反斜杠加倍来转义给定字符串
 *
 * 注意：这用于处理 postgresql.conf 条目，并在 pg_basebackup 中引用
 * 字符串字面量以编写恢复配置。
 * 由于 postgresql.conf 字符串被定义为将反斜杠视为转义，
 * 因此我们在这里必须将反斜杠加倍。
 *
 * 由于此函数仅用于解析或创建配置
 * 文件，因此我们不关心编码问题。
 *
 * 返回一个 malloced() 字符串，由调用者负责
 * 进行释放。
 */
char * escape_single_quotes_ascii(const char *fc_src)
{
	int			fc_len = strlen(fc_src),
				fc_i,
				fc_j;
	char	   *fc_result = malloc(fc_len * 2 + 1);

	if (!fc_result)
		return NULL;

	for (fc_i = 0, fc_j = 0; fc_i < fc_len; fc_i++)
	{
		if (SQL_STR_DOUBLE(fc_src[fc_i], true))
			fc_result[fc_j++] = fc_src[fc_i];
		fc_result[fc_j++] = fc_src[fc_i];
	}
	fc_result[fc_j] = '\0';
	return fc_result;
}
